/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import beans.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import response.LoginResponse;

/**
 *
 * @author Ahmed
 */
public class UsuarioDAO extends ConnectBD{

    public Usuario InsertarUsuario(Usuario usuario) throws SQLException {
        Usuario usu = new Usuario();
        String sql;
        sql = "INSERT INTO usuario(usuario,password,nombre,apellidoPaterno,apellidoMaterno,dni,contacto,tipoUsuario,idVEHICULO,estado)" + 
              " VALUES (?,?,?,?,?,?,?,?,?,1)";
        
        System.out.println("sql InsertarUsuario: " + sql);
        
        PreparedStatement pst = conexion.conn.prepareStatement(sql);
        
        pst.setString(1, usuario.getUser());
        pst.setString(2, usuario.getPassword());
        pst.setString(3, usuario.getNombre());
        pst.setString(4, usuario.getApellidoPaterno());
        pst.setString(5, usuario.getApellidoMaterno());
        pst.setString(6, usuario.getNumero_documento());
        pst.setString(7, usuario.getTelefono());
        pst.setInt(8, usuario.getRol_id());
        pst.setInt(9,usuario.getVehiculo_id());
        pst.execute();
        
        sql = "SELECT max(usuario.idusuario) from usuario";
        System.out.println("sql InsertarUsuario: " + sql);
        pst.executeQuery(sql);
        
        ResultSet rs = pst.getResultSet();
        
        if (rs.next()){
            usu = usuario;
            usu.setId(rs.getInt(1));            
        }
        return usu;        
    }

    public Mensaje ActualizarUsuario(Usuario usuario) throws SQLException {
        Mensaje mensaje = new Mensaje();
        mensaje.me = "";
        
        String sql;
        
        sql = "UPDATE usuario " +
              " SET password = '" + usuario.getPassword() + "', nombre = '" + usuario.getNombre() + "', apellidoPaterno = '" + usuario.getApellidoPaterno() + "', apellidoMaterno = '" + usuario.getApellidoMaterno() + "', dni = " + usuario.getNumero_documento() + ", contacto = '"+usuario.getTelefono() + "',tipoUsuario = " + usuario.getRol_id() + " " +
              " WHERE idUSUARIO = " + usuario.getId() + " AND estado = 1";
        
        System.out.println("sql : " + sql);
        Statement st = conexion.conn.createStatement();
        st.executeUpdate(sql);
        
        return mensaje;
        
    }

    public Mensaje EliminarUsuario(Usuario usuario) throws SQLException {
        Mensaje mensaje = new Mensaje();
        
        String sql;
        
        sql = "UPDATE usuario " +
              " SET estado = 0 " +
              " WHERE idUSUARIO = " + usuario.getId();
        
        System.out.println("sql: " + sql);
        
        Statement st = conexion.conn.createStatement();
        st.executeUpdate(sql);
        
        return mensaje;        
    }

    public LoginResponse loginUsuario(Usuario usuario) throws SQLException {
        LoginResponse login = new LoginResponse();
        
        String sql = "SELECT U.idUSUARIO, U.nombre, U.apellidoPaterno,U.apellidoMaterno,T.descripcion" +
                     " FROM usuario U,tipoUsuario T" +
                     " WHERE U.usuario = ? AND U.password = ? AND U.estado = 1 AND T.idTipoUsuario = U.tipoUsuario";
        
        PreparedStatement pst = conexion.conn.prepareStatement(sql);
        pst.setString(1, usuario.getUser());
        pst.setString(2, usuario.getPassword());
        pst.execute();
        System.out.print("usuario: " + usuario.getUser()+ " password: " + usuario.getPassword());
        
        ResultSet rs = pst.getResultSet();
        
        if (rs.next()){
            login.id = rs.getInt(1);
            login.nombre = rs.getString(2) + " "+ rs.getString(3) +" "+rs.getString(4);
            login.tipo = rs.getString(5);
            
            if (login.tipo.equals("chofer") || login.tipo.equals("motorista")){
                sql = "SELECT idVEHICULO FROM usuario WHERE idUSUARIO = " + login.id + "";
                Statement st = conexion.conn.createStatement();
                st.execute(sql);

                rs = st.getResultSet();

                rs.next();

                login.idVehiculo = rs.getInt(1);
            }
        }
        else{
            login.me = "Datos incorrectos, verifique su usuario y contraseña";
        }
        
        
        
        System.out.println(login.me);
        return login;
        
    }

    public ListUsuario BuscarUsuario(Usuario usuario) throws SQLException {
        ListUsuario lista = new ListUsuario();
        lista.me = "";
        
        String sql;
        sql = "SELECT * FROM usuario WHERE estado = 1 ";
        if (usuario.getId() != -1){
            sql += " AND idUsuario = " + usuario.getId();
        }
        
        System.out.println("sql : " + sql);
        Statement st = conexion.conn.createStatement();
        
        st.executeQuery(sql);
        ResultSet rs = st.getResultSet();
        
        ArrayList<Usuario> listaUsuario = new ArrayList<>();
        while(rs.next()){
            
            int idUser = rs.getInt(1);
            String user = rs.getString(2);
            String password = rs.getString(3);
            String lastPassword1 = rs.getString(4);
            String lastPassword2 = rs.getString(5);
            String nombre = rs.getString(6);
            String apellidoPaterno = rs.getString(7);
            String apellidoMaterno = rs.getString(8);
            String numero_documento = rs.getString(9);
            String telefono_contacto = rs.getString(10);
            int tipo = rs.getInt(11);
            int estado = rs.getInt(12);
            
            Usuario usser = new Usuario(idUser, user, password, lastPassword1, lastPassword2, nombre,apellidoPaterno,apellidoMaterno,numero_documento,telefono_contacto,tipo, estado);
            listaUsuario.add(usser);
        }
        
        lista.lUsuario = listaUsuario;
        
        System.out.println(lista.lUsuario.size());
        
        return lista;
      
    }

    public Mensaje CambiarContrasenia(Usuario usuario) throws SQLException {
        
        Mensaje mensaje = new Mensaje();
        mensaje.me = "";
        
        String sql;
        sql = "UPDATE USUARIO " + 
              " SET password = '"+usuario.getPassword()+"' " + 
              "WHERE idUsuario = " + usuario.getId() + " AND estado = 1";
        
        System.out.println("sql : " + sql);
        Statement st = conexion.conn.createStatement();
        st.executeUpdate(sql);
        
        return mensaje;
    }    

    public ListRol listarRoles() throws SQLException {
        ListRol lista = new ListRol();
        PreparedStatement pst = conexion.conn.prepareStatement("SELECT idTipoUsuario, descripcion FROM tipoUsuario");
        pst.execute();
        
        ResultSet rs = pst.getResultSet();
        
        while(rs.next()){
            Rol rr = new Rol();
            rr.rol_id = rs.getInt(1);
            rr.rol_nombre = rs.getString(2);
            lista.lRol.add(rr);
        }
        return lista;
    }
}
